<?php
/**
 * 控制器基类
 * Author: Dcr
 * Date: 2019/7/17
 * Time: 17:36
 */
namespace dcr;
defined('IN_DCR') or exit('No permission resources.');
use dcr\classes\TeamplateClass;
class Controller
{
    protected $module;
    protected $controller;
    protected $method;

    public function __construct()
    {
        $this->module = Base::$module;          //当前模块
        $this->controller = Base::$controller;  //当前控制器
        $this->method = Base::$method;          //当前方法
    }

    /**
     * @param string $template 模板路径
     * @param string $module   其他模块
     * @throws \Exception
     */
    protected function show($template = '',$module=''){
        //获取模板文件
        $templateFile = $this->templatePath($template,$module);
        //引入模板并解析
        return $this->parseTemplate($templateFile);
    }

    /**
     * 获取模板目录
     * @param string $template  模板文件名
     * @param string $module    模块名
     * @return string
     * @throws \Exception
     */
    protected function templatePath($template = '',$module=''){
        //模板路径，默认在对应模块下views目录 控制器 方法
        $tempPath =  '/views/'.strtolower($this->controller).'/'.strtolower($this->method);
        //如果有指定传模板
        if( !empty($template) ){
            if( strpos($template,'/') !== false){
                $tempPath = '/views/'.trim($template,'/');
            } else {
                $tempPath = '/views/'.strtolower($this->controller).'/'.trim($template,'/');
            }
        }
        $suffix = Base::getConfig('template.suffix');   //模板后缀
        //最终的模板文件路径 /WWW/mvc/app/home/views/index/index.html
        $templateFile = APP_PATH.'/'.($module ? $module : $this->module). $tempPath.'.'.$suffix;
        if( !file_exists($templateFile) ){
            throw new \Exception($templateFile . ' 模板文件不存在！');
        }
        return $templateFile;
    }

    /**
     * 模板编译+解析
     * @param $templateFile
     * @throws \Exception
     */
    protected function parseTemplate($templateFile){
        //解析模板
        $tempParse = TeamplateClass::getInstance();
        //引入解析后的模板文件
        return $tempParse->template($templateFile);
    }
}